home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / documents / RFC / rfc1263.txt < prev    next >
Text File  |  1994-08-01  |  54KB  |  1,067 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                        S. O'Malley
  8. Request for Comments: 1263                                   L. Peterson
  9.                                                    University of Arizona
  10.                                                             October 1991
  11.  
  12.  
  13.                    TCP EXTENSIONS CONSIDERED HARMFUL
  14.  
  15.  
  16. Status of this Memo
  17.  
  18.    This memo provides information for the Internet community.  It does
  19.    not specify an Internet standard.  Distribution of this document is
  20.    unlimited.
  21.  
  22. Abstract
  23.  
  24.    This RFC comments on recent proposals to extend TCP.  It argues that
  25.    the backward compatible extensions proposed in RFC's 1072 and 1185
  26.    should not be pursued, and proposes an alternative way to evolve the
  27.    Internet protocol suite.  Its purpose is to stimulate discussion in
  28.    the Internet community.
  29.  
  30. 1.  Introduction
  31.  
  32.    The rapid growth of the size, capacity, and complexity of the
  33.    Internet has led to the need to change the existing protocol suite.
  34.    For example, the maximum TCP window size is no longer sufficient to
  35.    efficiently support the high capacity links currently being planned
  36.    and constructed. One is then faced with the choice of either leaving
  37.    the protocol alone and accepting the fact that TCP will run no faster
  38.    on high capacity links than on low capacity links, or changing TCP.
  39.    This is not an isolated incident. We have counted at least eight
  40.    other proposed changes to TCP (some to be taken more seriously than
  41.    others), and the question is not whether to change the protocol
  42.    suite, but what is the most cost effective way to change it.
  43.  
  44.    This RFC compares the costs and benefits of three approaches to
  45.    making these changes: the creation of new protocols, backward
  46.    compatible protocol extensions, and protocol evolution. The next
  47.    section introduces these three approaches and enumerates the
  48.    strengths and weaknesses of each.  The following section describes
  49.    how we believe these three approaches are best applied to the many
  50.    proposed changes to TCP. Note that we have not written this RFC as an
  51.    academic exercise.  It is our intent to argue against acceptance of
  52.    the various TCP extensions, most notably RFC's 1072 and 1185 [4,5],
  53.    by describing a more palatable alternative.
  54.  
  55.  
  56.  
  57.  
  58. O'Malley & Peterson                                             [Page 1]
  59.  
  60. RFC 1263           TCP Extensions Considered Harmful        October 1991
  61.  
  62.  
  63. 2.  Creation vs. Extension vs. Evolution
  64.  
  65. 2.1.  Protocol Creation
  66.  
  67.    Protocol creation involves the design, implementation,
  68.    standardization, and distribution of an entirely new protocol. In
  69.    this context, there are two basic reasons for creating a new
  70.    protocol. The first is to replace an old protocol that is so outdated
  71.    that it can no longer be effectively extended to perform its original
  72.    function.  The second is to add a new protocol because users are
  73.    making demands upon the original protocol that were not envisioned by
  74.    the designer and cannot be efficiently handled in terms of the
  75.    original protocol.  For example, TCP was designed as a reliable
  76.    byte-stream protocol but is commonly used as both a reliable record-
  77.    stream protocol and a reliable request-reply protocol due to the lack
  78.    of such protocols in the Internet protocol suite.  The performance
  79.    demands placed upon a byte-stream protocol in the new Internet
  80.    environment makes it difficult to extend TCP to meet these new
  81.    application demands.
  82.  
  83.    The advantage of creating a new protocol is the ability to start with
  84.    a clean sheet of paper when attempting to solve a complex network
  85.    problem.  The designer, free from the constraints of an existing
  86.    protocol, can take maximum advantage of modern network research in
  87.    the basic algorithms needed to solve the problem. Even more
  88.    importantly, the implementor is free to steal from a large number of
  89.    existing academic protocols that have been developed over the years.
  90.    In some cases, if truly new functionality is desired, creating a new
  91.    protocol is the only viable approach.
  92.  
  93.    The most obvious disadvantage of this approach is the high cost of
  94.    standardizing and distributing an entirely new protocol.  Second,
  95.    there is the issue of making the new protocol reliable. Since new
  96.    protocols have not undergone years of network stress testing, they
  97.    often contain bugs which require backward compatible fixes, and
  98.    hence, the designer is back where he or she started.  A third
  99.    disadvantage of introducing new protocols is that they generally have
  100.    new interfaces which require significant effort on the part of the
  101.    Internet community to use. This alone is often enough to kill a new
  102.    protocol.
  103.  
  104.    Finally, there is a subtle problem introduced by the very freedom
  105.    provided by this approach. Specifically, being able to introduce a
  106.    new protocol often results in protocols that go far beyond the basic
  107.    needs of the situation.  New protocols resemble Senate appropriations
  108.    bills; they tend to accumulate many amendments that have nothing to
  109.    do with the original problem. A good example of this phenomena is the
  110.    attempt to standardize VMTP [1] as the Internet RPC protocol. While
  111.  
  112.  
  113.  
  114. O'Malley & Peterson                                             [Page 2]
  115.  
  116. RFC 1263           TCP Extensions Considered Harmful        October 1991
  117.  
  118.  
  119.    VMTP was a large protocol to begin with, the closer it got to
  120.    standardization the more features were added until it essentially
  121.    collapsed under its own weight. As we argue below, new protocols
  122.    should initially be minimal, and then evolve as the situation
  123.    dictates.
  124.  
  125.  
  126. 2.2.  Backward Compatible Extensions
  127.  
  128.    In a backward compatible extension, the protocol is modified in such
  129.    a fashion that the new version of the protocol can transparently
  130.    inter-operate with existing versions of the protocol. This generally
  131.    implies no changes to the protocol's header. TCP slow start [3] is an
  132.    example of such a change. In a slightly more relaxed version of
  133.    backward compatibility, no changes are made to the fixed part of a
  134.    protocol's header. Instead, either some fields are added to the
  135.    variable length options field found at the end of the header, or
  136.    existing header fields are overloaded (i.e., used for multiple
  137.    purposes). However, we can find no real advantage to this technique
  138.    over simply changing the protocol.
  139.  
  140.    Backward compatible extensions are widely used to modify protocols
  141.    because there is no need to synchronize the distribution of the new
  142.    version of the protocol. The new version is essentially allowed to
  143.    diffuse through the Internet at its own pace, and at least in theory,
  144.    the Internet will continue to function as before. Thus, the explicit
  145.    distribution costs are limited. Backward compatible extensions also
  146.    avoid the bureaucratic costs of standardizing a new protocol. TCP is
  147.    still TCP and the approval cost of a modification to an existing
  148.    protocol is much less than that of a new protocol. Finally, the very
  149.    difficulty of making such changes tends to restrict the changes to
  150.    the minimal set needed to solve the current problem. Thus, it is rare
  151.    to see unneeded changes made when using this technique.
  152.  
  153.    Unfortunately, this approach has several drawbacks. First, the time
  154.    to distribute the new version of the protocol to all hosts can be
  155.    quite long (forever in fact). This leaves the network in a
  156.    heterogeneous state for long periods of time. If there is the
  157.    slightest incompatibly between old and new versions, chaos can
  158.    result. Thus, the implicit cost of this type of distribution can be
  159.    quite high. Second, designing a backward compatible change to a new
  160.    protocol is extremely difficult, and the implementations "tend toward
  161.    complexity and ugliness" [5]. The need for backward compatibility
  162.    ensures that no code can every really be eliminated from the
  163.    protocol, and since such vestigial code is rarely executed, it is
  164.    often wrong. Finally, most protocols have limits, based upon the
  165.    design decisions of it inventors, that simply cannot be side-stepped
  166.    in this fashion.
  167.  
  168.  
  169.  
  170. O'Malley & Peterson                                             [Page 3]
  171.  
  172. RFC 1263           TCP Extensions Considered Harmful        October 1991
  173.  
  174.  
  175. 2.3.  Protocol Evolution
  176.  
  177.    Protocol evolution is an approach to protocol change that attempts to
  178.    escape the limits of backward compatibility without incurring all of
  179.    the costs of creating new protocols. The basic idea is for the
  180.    protocol designer to take an existing protocol that requires
  181.    modification and make the desired changes without maintaining
  182.    backward compatibility.  This drastically simplifies the job of the
  183.    protocol designer. For example, the limited TCP window size could be
  184.    fixed by changing the definition of the window size in the header
  185.    from 16-bits to 32-bits, and re-compiling the protocol. The effect of
  186.    backward compatibility would be ensured by simply keeping both the
  187.    new and old version of the protocol running until most machines use
  188.    the new version. Since the change is small and invisible to the user
  189.    interface, it is a trivial problem to dynamically select the correct
  190.    TCP version at runtime. How this is done is discussed in the next
  191.    section.
  192.  
  193.    Protocol evolution has several advantages. First, it is by far the
  194.    simplest type of modification to make to a protocol, and hence, the
  195.    modifications can be made faster and are less likely to contain bugs.
  196.    There is no need to worry about the effects of the change on all
  197.    previous versions of the protocol. Also, most of the protocol is
  198.    carried over into the new version unchanged, thus avoiding the design
  199.    and debugging cost of creating an entirely new protocol. Second,
  200.    there is no artificial limit to the amount of change that can be made
  201.    to a protocol, and as a consequence, its useful lifetime can be
  202.    extended indefinitely. In a series of evolutionary steps, it is
  203.    possible to make fairly radical changes to a protocol without
  204.    upsetting the Internet community greatly. Specifically, it is
  205.    possible to both add new features and remove features that are no
  206.    longer required for the current environment.  Thus, the protocol is
  207.    not condemned to grow without bound. Finally, by keeping the old
  208.    version of the protocol around, backward compatibility is guaranteed.
  209.    The old code will work as well as it ever did.
  210.  
  211.    Assuming the infrastructure described in the following subsection,
  212.    the only real disadvantage of protocol evolution is the amount of
  213.    memory required to run several versions of the same protocol.
  214.    Fortunately, memory is not the scarcest resource in modern
  215.    workstations (it may, however, be at a premium in the BSD kernel and
  216.    its derivatives). Since old versions may rarely if ever be executed,
  217.    the old versions can be swapped out to disk with little performance
  218.    loss. Finally, since this cost is explicit, there is a huge incentive
  219.    to eliminate old protocol versions from the network.
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226. O'Malley & Peterson                                             [Page 4]
  227.  
  228. RFC 1263           TCP Extensions Considered Harmful        October 1991
  229.  
  230.  
  231. 2.4.  Infrastructure Support for Protocol Evolution
  232.  
  233.    The effective use of protocol evolution implies that each protocol is
  234.    considered a vector of implementations which share the same top level
  235.    interface, and perhaps not much else.  TCP[0] is the current
  236.    implementation of TCP and exists to provide backward compatibility
  237.    with all existing machines. TCP[1] is a version of TCP that is
  238.    optimized for high-speed networks.  TCP[0] is always present; TCP[1]
  239.    may or may not be. Treating TCP as a vector of protocols requires
  240.    only three changes to the way protocols are designed and implemented.
  241.  
  242.    First, each version of TCP is assigned a unique id, but this id is
  243.    not given as an IP protocol number. (This is because IP's protocol
  244.    number field is only 8 bits long and could easily be exhausted.)  The
  245.    "obvious" solution to this limitation is to increase IP's protocol
  246.    number field to 32 bits. In this case, however, the obvious solution
  247.    is wrong, not because of the difficultly of changing IP, but simply
  248.    because there is a better approach. The best way to deal with this
  249.    problem is to increase the IP protocol number field to 32 bits and
  250.    move it to the very end of the IP header (i.e., the first four bytes
  251.    of the TCP header).  A backward compatible modification would be made
  252.    to IP such that for all packets with a special protocol number, say
  253.    77, IP would look into the four bytes following its header for its
  254.    de-multiplexing information. On systems which do not support a
  255.    modified IP, an actual protocol 77 would be used to perform the de-
  256.    multiplexing to the correct TCP version.
  257.  
  258.    Second, a version control protocol, called VTCP, is used to select
  259.    the appropriate version of TCP for a particular connection. VTCP is
  260.    an example of a virtual protocol as introduced in [2]. Application
  261.    programs access the various versions of TCP through VTCP. When a TCP
  262.    connection is opened to a specific machine, VTCP checks its local
  263.    cache to determine the highest common version shared by the two
  264.    machines. If the target machine is in the cache, it opens that
  265.    version of TCP and returns the connection to the protocol above and
  266.    does not effect performance. If the target machine is not found in
  267.    the cache, VTCP sends a UDP packet to the other machine asking what
  268.    versions of TCP that machine supports. If it receives a response, it
  269.    uses that information to select a version and puts the information in
  270.    the cache.  If no reply is forthcoming, it assumes that the other
  271.    machine does not support VTCP and attempts to open a TCP[0]
  272.    connection. VTCP's cache is flushed occasionally to ensure that its
  273.    information is current.
  274.  
  275.    Note that this is only one possible way for VTCP to decide the right
  276.    version of TCP to use. Another possibility is for VTCP to learn the
  277.    right version for a particular host when it resolves the host's name.
  278.    That is, version information could be stored in the Domain Name
  279.  
  280.  
  281.  
  282. O'Malley & Peterson                                             [Page 5]
  283.  
  284. RFC 1263           TCP Extensions Considered Harmful        October 1991
  285.  
  286.  
  287.    System. It is also possible that VTCP might take the performance
  288.    characteristics of the network into consideration when selecting a
  289.    version; TCP[0] may in fact turn out to be the correct choice for a
  290.    low-bandwidth network.
  291.  
  292.    Third, because our proposal would lead to a more dynamically changing
  293.    network architecture, a mechanism for distributing new versions will
  294.    need to be developed. This is clearly the hardest requirement of the
  295.    infrastructure, but we believe that it can be addressed in stages.
  296.    More importantly, we believe this problem can be addressed after the
  297.    decision has been made to go the protocol evolution route.  In the
  298.    short term, we are considering only a single new version of TCP---
  299.    TCP[1]. This version can be distributed in the same ad hoc way, and
  300.    at exactly the same cost, as the backward compatible changes
  301.    suggested in RFC's 1072 and 1185.
  302.  
  303.    In the medium term, we envision the IAB approving new versions of TCP
  304.    every year or so. Given this scenario, a simple distribution
  305.    mechanism can be designed based on software distribution mechanisms
  306.    that have be developed for other environments; e.g., Unix RDIST and
  307.    Mach SUP.  Such a mechanism need not be available on all hosts.
  308.    Instead, hosts will be divided into two sets, those that can quickly
  309.    be updated with new protocols and those that cannot.  High
  310.    performance machines that can use high performance networks will need
  311.    the most current version of TCP as soon as it is available, thus they
  312.    have incentive to change.  Old machines which are too slow to drive a
  313.    high capacity lines can be ignored, and probably should be ignored.
  314.  
  315.    In the long term, we envision protocols being designed on an
  316.    application by application basis, without the need for central
  317.    approval. In such a world, a common protocol implementation
  318.    environment---a protocol backplane---is the right way to go.  Given
  319.    such a backplane, protocols can be automatically installed over the
  320.    network. While we claim to know how to build such an environment,
  321.    such a discussion is beyond the scope of this paper.
  322.  
  323.  
  324. 2.5.  Remarks
  325.  
  326.    Each of these three methods has its advantages.  When used in
  327.    combination, the result is better protocols at a lower overall cost.
  328.    Backward compatible changes are best reserved for changes that do not
  329.    affect the protocol's header, and do not require that the instance
  330.    running on the other end of the connection also be changed.  Protocol
  331.    evolution should be the primary way of dealing with header fields
  332.    that are no longer large enough, or when one algorithm is substituted
  333.    directly for another.  New protocols should be written to off load
  334.    unexpected user demands on existing protocols, or better yet, to
  335.  
  336.  
  337.  
  338. O'Malley & Peterson                                             [Page 6]
  339.  
  340. RFC 1263           TCP Extensions Considered Harmful        October 1991
  341.  
  342.  
  343.    catch them before they start.
  344.  
  345.    There are also synergistic effects. First, since we know it is
  346.    possible to evolve a newly created protocol once it has been put in
  347.    place, the pressure to add unnecessary features should be reduced.
  348.    Second, the ability to create new protocols removes the pressure to
  349.    overextend a given protocol. Finally, the ability to evolve a
  350.    protocol removes the pressure to maintain backward compatibility
  351.    where it is really not possible.
  352.  
  353.  
  354. 3.  TCP Extensions: A Case Study
  355.  
  356.    This section examines the effects of using our proposed methodology
  357.    to implement changes to TCP. We will begin by analyzing the backward
  358.    compatible extensions defined in RFC's 1072 and 1185, and proposing a
  359.    set of much simpler evolutionary modifications. We also analyze
  360.    several more problematical extensions to TCP, such as Transactional
  361.    TCP. Finally, we point our some areas of TCP which may require
  362.    changes in the future.
  363.  
  364.    The evolutionary modification to TCP that we propose includes all of
  365.    the functionality described in RFC's 1072 and 1185, but does not
  366.    preserve the header format.  At the risk of being misunderstood as
  367.    believing backward compatibility is a good idea, we also show how our
  368.    proposed changes to TCP can be folded into a backward compatible
  369.    implementation of TCP.  We do this as a courtesy for those readers
  370.    that cannot accept the possibility of multiple versions of TCP.
  371.  
  372.  
  373. 3.1.  RFC's 1072 and 1185
  374.  
  375.    3.1.1.  Round Trip Timing
  376.  
  377.    In RFC 1072, a new ECHO option is proposed that allows each TCP
  378.    packet to carry a timestamp in its header.  This timestamp is used to
  379.    keep a more accurate estimate of the RTT (round trip time) used to
  380.    decide when to re-transmit segments. In the original TCP algorithm,
  381.    the sender manually times a small number of sends. The resulting
  382.    algorithm was quite complex and does not produce an accurate enough
  383.    RTT for high capacity networks. The inclusion of a timestamp in every
  384.    header both simplifies the code needed to calculate the RTT and
  385.    improves the accuracy and robustness of the algorithm.
  386.  
  387.    The new algorithm as proposed in RFC 1072 does not appear to have any
  388.    serious problems. However, the authors of RFC 1072 go to great
  389.    lengths in an attempt to keep this modification backward compatible
  390.    with the previous version of TCP. They place an ECHO option in the
  391.  
  392.  
  393.  
  394. O'Malley & Peterson                                             [Page 7]
  395.  
  396. RFC 1263           TCP Extensions Considered Harmful        October 1991
  397.  
  398.  
  399.    SYN segment and state, "It is likely that most implementations will
  400.    properly ignore any options in the SYN segment that they do not
  401.    understand, so new initial options should not cause problems" [4].
  402.    This statement does not exactly inspire confidence, and we consider
  403.    the addition of an optional field to any protocol to be a de-facto,
  404.    if not a de-jure, example of an evolutionary change. Optional fields
  405.    simply attempt to hide the basic incompatibility inside the protocol,
  406.    it does not eliminate it.  Therefore, since we are making an
  407.    evolutionary change anyway, the only modification to the proposed
  408.    algorithm is to move the fields into the header proper.  Thus, each
  409.    header will contain 32-bit echo and echo reply fields. Two fields are
  410.    needed to handle bi-directional data streams.
  411.  
  412.  
  413.    3.1.2.  Window Size and Sequence Number Space
  414.  
  415.    Long Fat Networks (LFN's), networks which contain very high capacity
  416.    lines with very high latency, introduce the possibility that the
  417.    number of bits in transit (the bandwidth-delay product) could exceed
  418.    the TCP window size, thus making TCP the limiting factor in network
  419.    performance.  Worse yet, the time it takes the sequence numbers to
  420.    wrap around could be reduced to a point below the MSL (maximum
  421.    segment lifetime), introducing the possibility of old packets being
  422.    mistakenly accepted as new.
  423.  
  424.    RFC 1072 extends the window size through the use of an implicit
  425.    constant scaling factor. The window size in the TCP header is
  426.    multiplied by this factor to get the true window size.  This
  427.    algorithm has three problems. First, one must prove that at all times
  428.    the implicit scaling factor used by the sender is the same as the
  429.    receiver.  The proposed algorithm appears to do so, but the
  430.    complexity of the algorithm creates the opportunity for poor
  431.    implementations to affect the correctness of TCP.  Second, the use of
  432.    a scaling factor complicates the TCP implementation in general, and
  433.    can have serious effects on other parts of the protocol.
  434.  
  435.    A final problem is what we characterize as the "quantum window
  436.    sizing" problem. Assuming that the scaling factors will be powers of
  437.    two, the algorithm right shifts the receiver's window before sending
  438.    it.  This effectively rounds the window size down to the nearest
  439.    multiple of the scaling factor. For large scaling factors, say 64k,
  440.    this implies that window values are all multiples of 64k and the
  441.    minimum window size is 64k; advertising a smaller window is
  442.    impossible. While this is not necessarily a problem (and it seems to
  443.    be an extreme solution to the silly window syndrome) what effect this
  444.    will have on the performance of high-speed network links is anyone's
  445.    guess. We can imagine this extension leading to future papers
  446.    entitled "A Quantum Mechanical Approach to Network Performance".
  447.  
  448.  
  449.  
  450. O'Malley & Peterson                                             [Page 8]
  451.  
  452. RFC 1263           TCP Extensions Considered Harmful        October 1991
  453.  
  454.  
  455.    RFC 1185 is an attempt to get around the problem of the window
  456.    wrapping too quickly without explicitly increasing the sequence
  457.    number space.  Instead, the RFC proposes to use the timestamp used in
  458.    the ECHO option to weed out old duplicate messages. The algorithm
  459.    presented in RFC 1185 is complex and has been shown to be seriously
  460.    flawed at a recent End-to-End Research Group meeting.  Attempts are
  461.    currently underway to fix the algorithm presented in the RFC. We
  462.    believe that this is a serious mistake.
  463.  
  464.    We see two problems with this approach on a very fundamental level.
  465.    First, we believe that making TCP depend on accurate clocks for
  466.    correctness to be a mistake. The Internet community has NO experience
  467.    with transport protocols that depend on clocks for correctness.
  468.    Second, the proposal uses two distinct schemes to deal with old
  469.    duplicate packets: the sliding window algorithm takes care of "new"
  470.    old packets (packets from the current sequence number epoch) and the
  471.    timestamp algorithm deals with "old" old packets (packets from
  472.    previous sequence number epochs). It is hard enough getting one of
  473.    these schemes to work much less to get two to work and ensure that
  474.    they do not interfere with one another.
  475.  
  476.    In RFC 1185, the statement is made that "An obvious fix for the
  477.    problem of cycling the sequence number space is to increase the size
  478.    of the TCP sequence number field." Using protocol evolution, the
  479.    obvious fix is also the correct one. The window size can be increased
  480.    to 32 bits by simply changing a short to a long in the definition of
  481.    the TCP header. At the same time, the sequence number and
  482.    acknowledgment fields can be increased to 64 bits.  This change is
  483.    the minimum complexity modification to get the job done and requires
  484.    little or no analysis to be shown to work correctly.
  485.  
  486.    On machines that do not support 64-bit integers, increasing the
  487.    sequence number size is not as trivial as increasing the window size.
  488.    However, it is identical in cost to the modification proposed in RFC
  489.    1185; the high order bits can be thought of as an optimal clock that
  490.    ticks only when it has to.  Also, because we are not dealing with
  491.    real time, the problems with unreliable system clocks is avoided.  On
  492.    machines that support 64-bit integers, the original TCP code may be
  493.    reused.  Since only very high performance machines can hope to drive
  494.    a communications network at the rates this modification is designed
  495.    to support, and the new generation of RISC microprocessors (e.g.,
  496.    MIPS R4000 and PA-RISC) do support 64-bit integers, the assumption of
  497.    64-bit arithmetic may be more of an advantage than a liability.
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506. O'Malley & Peterson                                             [Page 9]
  507.  
  508. RFC 1263           TCP Extensions Considered Harmful        October 1991
  509.  
  510.  
  511.    3.1.3.  Selective Retransmission
  512.  
  513.    Another problem with TCP's support for LFN's is that the sliding
  514.    window algorithm used by TCP does not support any form of selective
  515.    acknowledgment. Thus, if a segment is lost, the total amount of data
  516.    that must be re-transmitted is some constant times the bandwidth-
  517.    delay product, despite the fact that most of the segments have in
  518.    fact arrived at the receiver.  RFC 1072 proposes to extend TCP to
  519.    allow the receiver to return partial acknowledgments to the sender in
  520.    the hope that the sender will use that information to avoid
  521.    unnecessary re-transmissions.
  522.  
  523.    It has been our experience on predictable local area networks that
  524.    the performance of partial re-transmission strategies is highly non-
  525.    obvious, and it generally requires more than one iteration to find a
  526.    decent algorithm. It is therefore not surprising that the algorithm
  527.    proposed in RFC 1072 has some problems.  The proposed TCP extension
  528.    allows the receiver to include a short list of received fragments
  529.    with every ACK.  The idea being that when the receiver sends back a
  530.    normal ACK, it checks its queue of segments that have been received
  531.    out of order and sends the relative sequence numbers of contiguous
  532.    blocks of segments back to the sender. The sender then uses this
  533.    information to re-transmit the segments transmitted but not listed in
  534.    the ACK.
  535.  
  536.    As specified, this algorithm has two related problems: (1) it ignores
  537.    the relative frequencies of delivered and dropped packets, and (2)
  538.    the list provided in the option field is probably too short to do
  539.    much good on networks with large bandwidth-delay products.  In every
  540.    model of high bandwidth networks that we have seen, the packet loss
  541.    rate is very low, and thus, the ratio of dropped packets to delivered
  542.    packets is very low. An algorithm that returns ACKs as proposed is
  543.    simply going to have to send more information than one in which the
  544.    receiver returns NAKs.
  545.  
  546.    This problem is compounded by the short size of the TCP option field
  547.    (44 bytes). In theory, since we are only worried about high bandwidth
  548.    networks, returning ACKs instead of NAKs is not really a problem; the
  549.    bandwidth is available to send any information that's needed. The
  550.    problem comes when trying to compress the ACK information into the 44
  551.    bytes allowed.  The proposed extensions effectively compresses the
  552.    ACK information by allowing the receiver to ACK byte ranges rather
  553.    than segments, and scaling the relative sequence numbers of the re-
  554.    transmitted segments. This makes it much more difficult for the
  555.    sender to tell which segments should be re-transmitted, and
  556.    complicates the re-transmission code.  More importantly, one should
  557.    never compress small amounts of data being sent over a high bandwidth
  558.    network; it trades a scarce resource for an abundant resource.  On
  559.  
  560.  
  561.  
  562. O'Malley & Peterson                                            [Page 10]
  563.  
  564. RFC 1263           TCP Extensions Considered Harmful        October 1991
  565.  
  566.  
  567.    low bandwidth networks, selective retransmission is not needed and
  568.    the SACK option should be disabled.
  569.  
  570.    We propose two solutions to this problem. First, the receiver can
  571.    examine its list of out-of-order packets and guess which segments
  572.    have been dropped, and NAK those segments back to the sender. The
  573.    number of NAKs should be low enough that one per TCP packet should be
  574.    sufficient. Note that the receiver has just as much information as
  575.    the sender about what packets should be retransmitted, and in any
  576.    case, the NAKs are simply suggestions which have no effect on
  577.    correctness.
  578.  
  579.    Our second proposed modification is to increase the offset field in
  580.    the TCP header from 4 bits to 16 bits.  This allows 64k-bytes of TCP
  581.    header, which allows us to radically simplify the selective re-
  582.    transmission algorithm proposed in RFC 1072.  The receiver can now
  583.    simply send a list of 64-bit sequence numbers for the out-of-order
  584.    segments to the sender. The sender can then use this information to
  585.    do a partial retransmission without needing an ouji board to
  586.    translate ACKs into segments.  With the new header size, it may be
  587.    faster for the receiver to send a large list than to attempt to
  588.    aggregate segments into larger blocks.
  589.  
  590.  
  591.    3.1.4.  Header Modifications
  592.  
  593.    The modifications proposed above drastically change the size and
  594.    structure of the TCP header. This makes it a good time to re-think
  595.    the structure of the proposed TCP header. The primary goal of the
  596.    current TCP header is to save bits in the output stream. When TCP was
  597.    developed, a high bandwidth network was 56kbps, and the key use for
  598.    TCP was terminal I/O.  In both situations, minimal header size was
  599.    important.  Unfortunately, while the network has drastically
  600.    increased in performance and the usage pattern of the network is now
  601.    vastly different, most protocol designers still consider saving a few
  602.    bits in the header to be worth almost any price. Our basic goal is
  603.    different: to improve performance by eliminating the need to extract
  604.    information packed into odd length bit fields in the header.  Below
  605.    is our first cut at such a modification.
  606.  
  607.    The protocol id field is there to make further evolutionary
  608.    modifications to TCP easier. This field basically subsumes the
  609.    protocol number field contained in the IP header with a version
  610.    number.  Each distinct TCP version has a different protocol id and
  611.    this field ensures that the right code is looking at the right
  612.    header.  The offset field has been increased to 16 bits to support
  613.    the larger header size required, and to simplify header processing.
  614.    The code field has been extended to 16 bits to support more options.
  615.  
  616.  
  617.  
  618. O'Malley & Peterson                                            [Page 11]
  619.  
  620. RFC 1263           TCP Extensions Considered Harmful        October 1991
  621.  
  622.  
  623.    The source port and destination port are unchanged. The size of both
  624.    the sequence number and ACK fields have been increased to 64 bits.
  625.    The open window field has been increased to 32 bits. The checksum and
  626.    urgent data pointer fields are unchanged. The echo and echo reply
  627.    fields are added.  The option field remains but can be much larger
  628.    than in the old TCP.  All headers are padded out to 32 bit
  629.    boundaries.  Note that these changes increase the minimum header size
  630.    from 24 bytes (actually 36 bytes if the ECHO and ECHO reply options
  631.    defined in RFC 1072 are included on every packet) to 48 bytes. The
  632.    maximum header size has been increased to the maximum segment size.
  633.    We do not believe that the the increased header size will have a
  634.    measurable effect on protocol performance.
  635.  
  636.        0                   1                   2                   3
  637.        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  638.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  639.       |                        Protocol ID                            |
  640.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  641.       |              Offset           |              Code             |
  642.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  643.       |              Source           |              Dest             |
  644.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  645.       |                              Seq                              |
  646.       |                                                               |
  647.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  648.       |                              Ack                              |
  649.       |                                                               |
  650.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  651.       |                            Window                             |
  652.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  653.       |             Checksum          |             Urgent            |
  654.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  655.       |                             Echo                              |
  656.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  657.       |                          Echo Reply                           |
  658.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  659.       |  Options                                      |     Pad       |
  660.       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  661.  
  662.  
  663.    3.1.5.  Backward Compatibility
  664.  
  665.    The most likely objection to the proposed TCP extension is that it is
  666.    not backward compatible with the current version of TCP, and most
  667.    importantly, TCP's header. In this section we will present three
  668.    versions of the proposed extension with increasing degrees of
  669.    backward compatibility. The final version will combine the same
  670.    degree of backward compatibility found in the protocol described in
  671.  
  672.  
  673.  
  674. O'Malley & Peterson                                            [Page 12]
  675.  
  676. RFC 1263           TCP Extensions Considered Harmful        October 1991
  677.  
  678.  
  679.    RFC's 1072/1185, with the much simpler semantics described in this
  680.    RFC.
  681.  
  682.    We believe that the best way to preserve backward compatibility is to
  683.    leave all of TCP alone and support the transparent use of a new
  684.    protocol when and where it is needed. The basic scheme is the one
  685.    described in section 2.4. Those machines and operating systems that
  686.    need to support high speed connections should implement some general
  687.    protocol infrastructure that allows them to rapidly evolve protocols.
  688.    Machines that do not require such service simply keep using the
  689.    existing version of TCP. A virtual protocol is used to manage the use
  690.    of multiple TCP versions.
  691.  
  692.    This approach has several advantages. First, it guarantees backward
  693.    compatibility with ALL existing TCP versions because such
  694.    implementations will never see strange packets with new options.
  695.    Second, it supports further modification of TCP with little
  696.    additional costs. Finally, since our version of TCP will more closely
  697.    resemble the existing TCP protocol than that proposed in RFC's
  698.    1072/1185, the cost of maintaining two simple protocols will probably
  699.    be lower than maintaining one complex protocol.  (Note that with high
  700.    probability you still have to maintain two versions of TCP in any
  701.    case.)  The only additional cost is the memory required for keeping
  702.    around two copies of TCP.
  703.  
  704.    For those that insist that the only efficient way to implement TCP
  705.    modifications is in a single monolithic protocol, or those that
  706.    believe that the space requirements of two protocols would be too
  707.    great, we simply migrate the virtual protocol into TCP. TCP is
  708.    modified so that when opening a connection, the sender uses the TCP
  709.    VERSION option attached to the SYN packet to request using the new
  710.    version.  The receiver responds with a TCP VERSION ACK in the SYN ACK
  711.    packet, after which point, the new header format described in Section
  712.    3.1.4 is used. Thus, there is only one version of TCP, but that
  713.    version supports multiple header formats. The complexity of such a
  714.    protocol would be no worse than the protocol described in RFC
  715.    1072/1185. It does, however, make it more difficult to make
  716.    additional changes to TCP.
  717.  
  718.    Finally, for those that believe that the preservation of the TCP's
  719.    header format has any intrinsic value (e.g., for those that don't
  720.    want to re-program their ethernet monitors), a header compatible
  721.    version of our proposal is possible.  One simply takes all of the
  722.    additional information contained in the header given in Section 3.1.4
  723.    and places it into a single optional field. Thus, one could define a
  724.    new TCP option which consists of the top 32 bits of the sequence and
  725.    ack fields, the echo and echo_reply fields, and the top 16 bits of
  726.    the window field. This modification makes it more difficult to take
  727.  
  728.  
  729.  
  730. O'Malley & Peterson                                            [Page 13]
  731.  
  732. RFC 1263           TCP Extensions Considered Harmful        October 1991
  733.  
  734.  
  735.    advantage of machines with 64-bit address spaces, but at a minimum
  736.    will be just as easy to process as the protocol described in RFC
  737.    1072/1185.  The only restriction is that the size of the header
  738.    option field is still limited to 44 bytes, and thus, selective
  739.    retransmission using NAKs rather than ACKs will probably be required.
  740.  
  741.    The key observation is that one should make a protocol extension
  742.    correct and simple before trying to make it backward compatible.  As
  743.    far as we can tell, the only advantages possessed by the protocol
  744.    described in RFC 1072/1185 is that its typical header, size including
  745.    options, is 8 to 10 bytes shorter. The price for this "advantage" is
  746.    a protocol of such complexity that it may prove impossible for normal
  747.    humans to implement. Trying to maintain backward compatibility at
  748.    every stage of the protocol design process is a serious mistake.
  749.  
  750.  
  751. 3.2.  TCP Over Extension
  752.  
  753.    Another potential problem with TCP that has been discussed recently,
  754.    but has not yet resulted in the generation of an RFC, is the
  755.    potential for TCP to grab and hold all 2**16 port numbers on a given
  756.    machine.  This problem is caused by short port numbers, long MSLs,
  757.    and the misuse of TCP as a request-reply protocol. TCP must hold onto
  758.    each port after a close until all possible messages to that port have
  759.    died, about 240 seconds. Even worse, this time is not decreasing with
  760.    increase network performance.  With new fast hardware, it is possible
  761.    for an application to open a TCP connection, send data, get a reply,
  762.    and close the connection at a rate fast enough to use up all the
  763.    ports in less than 240 seconds. This usage pattern is generated by
  764.    people using TCP for something it was never intended to do---
  765.    guaranteeing at-most-once semantics for remote procedure calls.
  766.  
  767.    The proposed solution is to embed an RPC protocol into TCP while
  768.    preserving backward compatibility. This is done by piggybacking the
  769.    request message on the SYN packet and the reply message on the SYN-
  770.    ACK packet. This approach suffers from one key problem: it reduces
  771.    the probability of a correct TCP implementation to near 0. The basic
  772.    problem has nothing to do with TCP, rather it is the lack of an
  773.    Internet request-reply protocol that guarantees at-most-once
  774.    semantics.
  775.  
  776.    We propose to solve this problem by the creation of a new protocol.
  777.    This has already been attempted with VMTP, but the size and
  778.    complexity of VMTP, coupled with the process currently required to
  779.    standardize a new protocol doomed it from the start.  Instead of
  780.    solving the general problem, we propose to use Sprite RPC [7], a much
  781.    simpler protocol, as a means of off-loading inappropriate users from
  782.    TCP.
  783.  
  784.  
  785.  
  786. O'Malley & Peterson                                            [Page 14]
  787.  
  788. RFC 1263           TCP Extensions Considered Harmful        October 1991
  789.  
  790.  
  791.    The basic design would attempt to preserve as much of the TCP
  792.    interface as possible in order that current TCP (mis)users could be
  793.    switched to Sprite RPC without requiring code modification on their
  794.    part. A virtual protocol could be used to select the correct protocol
  795.    TCP or Sprite RPC if it exists on the other machine. A backward
  796.    compatible modification to TCP could be made which would simply
  797.    prevent it from grabbing all of the ports by refusing connections.
  798.    This would encourage TCP abusers to use the new protocol.
  799.  
  800.    Sprite RPC, which is designed for a local area network, has two
  801.    problems when extended into the Internet. First, it does not have a
  802.    usefully flow control algorithm. Second, it lacks the necessary
  803.    semantics to reliably tear down connections. The lack of a tear down
  804.    mechanism needs to be solved, but the flow control problem could be
  805.    dealt with in later iterations of the protocol as Internet blast
  806.    protocols are not yet well understood; for now, we could simple limit
  807.    the size of each message to 16k or 32k bytes. This might also be a
  808.    good place to use a decomposed version of Sprite RPC [2], which
  809.    exposes each of these features as separate protocols. This would
  810.    permit the quick change of algorithms, and once the protocol had
  811.    stabilized, a monolithic version could be constructed and distributed
  812.    to replace the decomposed version.
  813.  
  814.    In other words, the basic strategy is to introduce as simple of RPC
  815.    protocol as possible today, and later evolve this protocol to address
  816.    the known limitations.
  817.  
  818.  
  819. 3.3.  Future Modifications
  820.  
  821.    The header prediction algorithm should be generalized so as to be
  822.    less sensitive to changes in the protocols header and algorithm.
  823.    There almost seems to be as much effort to make all modifications to
  824.    TCP backward compatible with header prediction as there is to make
  825.    them backward compatible with TCP.  The question that needs to be
  826.    answered is: are there any changes we can made to TCP to make header
  827.    prediction easier, including the addition of information into the
  828.    header.  In [6], the authors showed how one might generalize
  829.    optimistic blast from VMTP to almost any protocol that performs
  830.    fragmentation and reassembly.  Generalizing header prediction so that
  831.    it scales with TCP modification would be step in the right direction.
  832.  
  833.    It is clear that an evolutionary change to increase the size of the
  834.    source and destination ports in the TCP header will eventually be
  835.    necessary.  We also believe that TCP could be made significantly
  836.    simpler and more flexible through the elimination of the pseudo-
  837.    header. The solution to this problem is to simply add a length field
  838.    and the IP address of the destination to the TCP header. It has also
  839.  
  840.  
  841.  
  842. O'Malley & Peterson                                            [Page 15]
  843.  
  844. RFC 1263           TCP Extensions Considered Harmful        October 1991
  845.  
  846.  
  847.    been mentioned that better and simpler TCP connection establishment
  848.    algorithms would be useful.  Some form of reliable record stream
  849.    protocol should be developed.  Performing sliding window and flow
  850.    control over records rather than bytes would provide numerous
  851.    opportunities for optimizations and allow TCP to return to its
  852.    original purpose as a byte-stream protocol. Finally, it has become
  853.    clear to us that the current Internet congestion control strategy is
  854.    to use TCP for everything since it is the only protocol that supports
  855.    congestion control. One of the primary reasons many "new protocols"
  856.    are proposed as TCP options is that it is the only way to get at
  857.    TCP's congestion control. At some point, a TCP-independent congestion
  858.    control scheme must be implemented and one might then be able to
  859.    remove the existing congestion control from TCP and radically
  860.    simplify the protocol.
  861.  
  862.  
  863. 4.  Discussion
  864.  
  865.    One obvious side effect of the changes we propose is to increase the
  866.    size of the TCP header. In some sense, this is inevitable; just about
  867.    every field in the header has been pushed to its limit by the radical
  868.    growth of the network. However, we have made very little effort to
  869.    make the minimal changes to solve the current problem. In fact, we
  870.    have tended to sacrifice header size in order to defer future changes
  871.    as long as possible. The problem with this is that one of TCP's
  872.    claims to fame is its efficiency at sending small one byte packets
  873.    over slow networks. Increasing the size of the TCP header will
  874.    inevitably result in some increase in overhead on small packets on
  875.    slow networks. Clark among others have stated that they see no
  876.    fundamental performance limitations that would prevent TCP from
  877.    supporting very high speed networks. This is true as far as it goes;
  878.    there seems to be a direct trade-off between TCP performance on high
  879.    speed networks and TCP performance on slow speed networks. The
  880.    dynamic range is simply too great to be optimally supported by one
  881.    protocol. Hence, in keeping around the old version of TCP we have
  882.    effectively split TCP into two protocols, one for high bandwidth
  883.    lines and the other for low bandwidth lines.
  884.  
  885.    Another potential argument is that all of the changes mentioned above
  886.    should be packaged together as a new version of TCP. This version
  887.    could be standardized and we could all go back to the status quo of
  888.    stable unchanging protocols.  While to a certain extent this is
  889.    inevitable---there is a backlog of necessary TCP changes because of
  890.    the current logistical problems in modifying protocols---it is only
  891.    begs the question. The status quo is simply unacceptably static;
  892.    there will always be future changes to TCP.  Evolutionary change will
  893.    also result in a better and more reliable TCP.  Making small changes
  894.    and distributing them at regular intervals ensures that one change
  895.  
  896.  
  897.  
  898. O'Malley & Peterson                                            [Page 16]
  899.  
  900. RFC 1263           TCP Extensions Considered Harmful        October 1991
  901.  
  902.  
  903.    has actually been stabilized before the next has been made.  It also
  904.    presents a more balanced workload to the protocol designer; rather
  905.    than designing one new protocol every 10 years he makes annual
  906.    protocol extensions. It will also eventually make protocol
  907.    distribution easier: the basic problem with protocol distribution now
  908.    is that it is done so rarely that no one knows how to do it and there
  909.    is no incentive to develop the infrastructure needed to perform the
  910.    task efficiently.  While the first protocol distribution is almost
  911.    guaranteed to be a disaster, the problem will get easier with each
  912.    additional one. Finally, such a new TCP would have the same problems
  913.    as VMTP did; a radically new protocol presents a bigger target.
  914.  
  915.    The violation of backward compatibility in systems as complex as the
  916.    Internet is always a serious step. However, backward compatibility is
  917.    a technique, not a religion. Two facts are often overlooked when
  918.    backward compatibility gets out of hand. First, violating backward
  919.    compatibility is always a big win when you can get away with it.  One
  920.    of the key advantages of RISC chips over CISC chips is simply that
  921.    they were not backward compatible with anything. Thus, they were not
  922.    bound by design decisions made when compilers were stupid and real
  923.    men programmed in assembler. Second, one is going to have to break
  924.    backward compatibility at some point anyway. Every system has some
  925.    headroom limitations which result in either stagnation (IBM mainframe
  926.    software) or even worse, accidental violations of backward
  927.    compatibility.
  928.  
  929.    Of course, the biggest problem with our approach is that it is not
  930.    compatible with the existing standardization process. We hope to be
  931.    able to design and distribute protocols in less time than it takes a
  932.    standards committee to agree on an acceptable meeting time.  This is
  933.    inevitable because the basic problem with networking is the
  934.    standardization process. Over the last several years, there has been
  935.    a push in the research community for lightweight protocols, when in
  936.    fact what is needed are lightweight standards.  Also note that we
  937.    have not proposed to implement some entirely new set of "superior"
  938.    communications protocols, we have simply proposed a system for making
  939.    necessary changes to the existing protocol suites fast enough to keep
  940.    up with the underlying change in the network.  In fact, the first
  941.    standards organization that realizes that the primary impediment to
  942.    standardization is poor logistical support will probably win.
  943.  
  944.  
  945. 5.  Conclusions
  946.  
  947.    The most important conclusion of this RFC is that protocol change
  948.    happens and is currently happening at a very respectable clip.  While
  949.    all of the changes given as example in this document are from TCP,
  950.    there are many other protocols that require modification.  In a more
  951.  
  952.  
  953.  
  954. O'Malley & Peterson                                            [Page 17]
  955.  
  956. RFC 1263           TCP Extensions Considered Harmful        October 1991
  957.  
  958.  
  959.    prosaic domain, the telephone company is running out of phone
  960.    numbers; they are being overrun by fax machines, modems, and cars.
  961.    The underlying cause of these problems seems to be an consistent
  962.    exponential increase almost all network metrics: number of hosts,
  963.    bandwidth, host performance, applications, and so on, combined with
  964.    an attempt to run the network with a static set of unchanging network
  965.    protocols.  This has been shown to be impossible and one can almost
  966.    feel the pressure for protocol change building. We simply propose to
  967.    explicitly deal with the changes rather keep trying to hold back the
  968.    flood.
  969.  
  970.    Of almost equal importance is the observation that TCP is a protocol
  971.    and not a platform for implementing other protocols. Because of a
  972.    lack of any alternatives, TCP has become a de-facto platform for
  973.    implementing other protocols. It provides a vague standard interface
  974.    with the kernel, it runs on many machines, and has a well defined
  975.    distribution path. Otherwise sane people have proposed Bounded Time
  976.    TCP (an unreliable byte stream protocol), Simplex TCP (which supports
  977.    data in only one direction) and Multi-cast TCP (too horrible to even
  978.    consider).  All of these protocols probably have their uses, but not
  979.    as TCP options. The fact that a large number of people are willing to
  980.    use TCP as a protocol implementation platform points to the desperate
  981.    need for a protocol independent platform.
  982.  
  983.    Finally, we point out that in our research we have found very little
  984.    difference in the actual technical work involved with the three
  985.    proposed methods of protocol modification. The amount of work
  986.    involved in a backward compatible change is often more than that
  987.    required for an evolutionary change or the creation of a new
  988.    protocol.  Even the distribution costs seem to be identical.  The
  989.    primary cost difference between the three approaches is the cost of
  990.    getting the modification approved. A protocol modification, no matter
  991.    how extensive or bizarre, seems to incur much less cost and risk. It
  992.    is time to stop changing the protocols to fit our current way of
  993.    thinking, and start changing our way of thinking to fit the
  994.    protocols.
  995.  
  996.  
  997. 6.  References
  998.  
  999.  
  1000. [1]  Cheriton D., "VMTP: Versatile Message Transaction Protocol", RFC
  1001.      1045, Stanford University, February 1988.
  1002.  
  1003.  
  1004. [2]  Hutchinson, N., Peterson, L., Abbott, M., and S. O'Malley, "RPC in
  1005.      the x-Kernel: Evaluating New Design Techniques", Proceedings of the
  1006.      12th Symposium on Operating System Principles, Pgs. 91-101,
  1007.  
  1008.  
  1009.  
  1010. O'Malley & Peterson                                            [Page 18]
  1011.  
  1012. RFC 1263           TCP Extensions Considered Harmful        October 1991
  1013.  
  1014.  
  1015.      December 1989.
  1016.  
  1017.  
  1018. [3]  Jacobson, V., "Congestion Avoidance and Control", SIGCOMM '88,
  1019.      August 1988.
  1020.  
  1021.  
  1022. [4]  Jacobson, V., and R. Braden, "TCP Extensions for Long-Delay Paths",
  1023.      RFC 1072, LBL, ISI, October 1988.
  1024.  
  1025.  
  1026. [5]  Jacobson, V., Braden, R., and L. Zhang, "TCP Extensions for High-
  1027.      Speed Paths", RFC 1185, LBL, ISI, PARC, October 1990.
  1028.  
  1029.  
  1030. [6]  O'Malley, S., Abbott, M., Hutchinson, N., and L. Peterson, "A Tran-
  1031.      sparent Blast Facility", Journal of Internetworking, Vol. 1, No.
  1032.      2, Pgs. 57-75, December 1990.
  1033.  
  1034.  
  1035. [7]  Welch, B., "The Sprite Remote Procedure Call System", UCB/CSD
  1036.      86/302, University of California at Berkeley, June 1988.
  1037.  
  1038. 7.  Security Considerations
  1039.  
  1040.    Security issues are not discussed in this memo.
  1041.  
  1042.  
  1043. 8.  Authors' Addresses
  1044.  
  1045.    Larry L. Peterson
  1046.    University of Arizona
  1047.    Department of Computer Sciences
  1048.    Tucson, AZ 85721
  1049.  
  1050.    Phone: (602) 621-4231
  1051.    EMail: llp@cs.arizona.edu
  1052.  
  1053.  
  1054.    Sean O'Malley
  1055.    University of Arizona
  1056.    Department of Computer Sciences
  1057.    Tucson, AZ 85721
  1058.  
  1059.    Phone: 602-621-8373
  1060.    EMail: sean@cs.arizona.edu
  1061.  
  1062.  
  1063.  
  1064.  
  1065.  
  1066. O'Malley & Peterson                                            [Page 19]
  1067.